<?php

class Dracosys {
    public static $tSession;

    /**
     * @static  isHelper
     *
     * Verifica se a classe especificada e um Helper
     *
     * @param string $StName    Nome do possivel Helper
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @since   2011-11-13
     * @return  boolean
     */
    public static function isHelper($StName) {
        return file_exists(self::getHelperFile($StName));
    }
    /**
     * @static  isInterface
     *
     * Verifica se a classe especificada e uma interface
     *
     * @param string $StName    Nome da possivel Interface
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @since   2011-11-13
     * @return  boolean
     */
    public static function isInterface($StName) {
        return file_exists(self::getInterfaceFile($StName));
    }
    /**
     * @static  isEntity
     *
     * Verifica se a classe especificada e uma Entidade
     *
     * @param string $StClasse    Nome da possivel entidade
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @since   2011-11-13
     * @return  boolean
     */
    public static function isEntity($StClasse) {
        return file_exists(self::getEntityFile($StClasse));
    }

    /**
     * @static  getHelperFile
     *
     * Captura o path de include do helper
     *
     * @param string $StHelper  Nome do helper
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @since   2011-11-13
     * @return  string
     */
    public static function getHelperFile($StHelper) {
        return DRA_CLASS_PATH . strtolower($StHelper) . '.class.php';
    }
    /**
     * @static  getInterfaceFile
     *
     * Captura o path de include da interface
     *
     * @param string $StInterface   Nome da interface
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @since   2011-11-13
     * @return  string
     */
    public static function getInterfaceFile($StInterface) {
        return DRA_INTERFACE_PATH .  strtolower($StInterface) . '.php';
    }
    /**
     * @static  getEntityFile
     *
     * Captura o path de include de uma entidade
     *
     * @param string $StClasse  Nome da entidade
     *
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     * @since   2011-11-13
     * @return  string
     */
    public static function getEntityFile($StClasse) {
        return DRA_ENTITY_PATH . strtolower($StClasse) . '.entity.php';
    }

     public static function getDaoFile($StClasse) {
        $StPrefixFileName = str_replace('Dao', '', $StClasse);
        return DRA_DAO_PATH . strtolower($StPrefixFileName) . '.dao.php';
    }

    public static function isDao($StClasse) {
        $StPrefixFileName = str_replace('Dao', '', $StClasse);
        return file_exists(self::getDaoFile($StPrefixFileName));
    }

    public static function getServiceFile($StClasse) {
        $StPrefixFileName = str_replace('Service', '', $StClasse);
        return DRA_SERVICE_PATH . strtolower($StPrefixFileName) . '.service.php';
    }

    public static function isService($StClasse) {
        $StPrefixFileName = str_replace('Service', '', $StClasse);
        return file_exists(self::getServiceFile($StPrefixFileName));
    }

    public static function isException($StClasse) {
        $StPrefixFileName = str_replace('Exception', '', $StClasse);
        return file_exists(self::getExceptionFile($StPrefixFileName));
    }

    public static function getExceptionFile($StClasse) {
        $StPrefixFileName = str_replace('Exception', '', $StClasse);
        return DRA_EXCEPTION_PATH . strtolower($StPrefixFileName) . '.exception.php';
    }

    //##31-12 Versao 2
    /**
     * @static  isUsuario
     *
     * Verifica se existe um usuario em sessao e se existe se e valido.
     *
     * @return  boolean
     * @since   2011-12-31
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function isUsuario() {
        if(empty($_SESSION['TSession'])) {return false;}
        $Usuario = self::getSession()->getValue(SESSION_SYSTEM, 'Usuario');
        return $Usuario instanceof Usuario ? true : false;
    }

    /**
     * @static  getLoggedUser
     *
     * Captura o usuario logado na sessao
     *
     * @return  boolean
     * @since   2011-12-31
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function getLoggedUser() {
        return self::getSession()->getValue(SESSION_SYSTEM, 'Usuario');
    }

    public static function unserializeSession() {
        Dracosys::$tSession = !empty($_SESSION['TSession']) ? unserialize($_SESSION['TSession']) : false;
    }

    /**
     * @static  getSession
     *
     * Captura o objeto session na sessao desserializado
     *
     * @return  boolean
     * @since   2011-12-31
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function getSession() {
        return self::$tSession;
    }
    /**
     * @static  saveSessionValue
     *
     * Simplifica a rotina de salvar um dado na sessao
     *
     * @param   String  $StBase     Pacote (Categoria) do que sera inserido
     * @param   String  $StIndex    Indice do que sera inserido
     * @param   Mixed   $MxValue    Conteudo que sera posto na sessao

     * @return  boolean
     * @since   2011-12-31
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function saveSessionValue($Base, $StIndex, $MxValue) {
        $tSession = self::getSession();
        if(!empty($tSession)) {
            $tSession->setValue($Base, $StIndex, $MxValue);
        }
    }
    /**
     * @static  getSessionValue
     *
     * Simplifica a rotina de capturar um valor da sessao
     *
     * @param   String  $StPackage  Pacote (Categoria) do que sera recuperado
     * @param   String  $StType     Tipo do pacote que sera recuperado
     * @param   String  $StIndex    Indice do valor a ser recuperado

     * @return  boolean
     * @since   2011-12-31
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function getSessionValue($StPackage = false, $StType = false, $StIndex = false) {
        $tSession = self::getSession();
        if(!empty($tSession)) {
            return $tSession->getValue($StPackage, $StType, $StIndex);
        }
        return false;
    }
    /**
     * @static  cleanSessionValue
     *
     * Simplifica a rotina de salvar um dado da sessao
     *
     * @param   String  $StPackage      Pacote que sera excluido
     * @param   String  $StType         Tipo do pacote que sera ecluido
     * @param   String  $StIndex        Indice do tipo do pacote que sera excluido
     *
     * @return  boolean
     * @since   2011-12-31
     * @author  Richard Brandao <richardsbrandao@gmail.com>
     */
    public static function cleanSessionValue($StPackage = false, $StType = false, $StIndex = false) {
        $tSession = self::getSession();
        if(!empty($tSession)) {
            $tSession->clean($StPackage, $StType, $StIndex);
        }
    }

    public static function getMainMenu() {
        return Dracosys::getSessionValue(SESSION_SYSTEM, 'MainMenu');
    }

}

?>
